﻿using System.Collections;
using System.Collections.Generic;

namespace IceDog.DNF.Program.Poker.Core
{
    public partial class Card
    {
        /// <summary>
        /// 卡片比较器
        /// </summary>
        public class Comparer : IComparer<Card>,IComparer
        {
            /// <summary>比较两个对象并返回指示一个是否小于、 等于还是大于另一个值。</summary>
            /// <param name="x">要比较的第一个对象。</param>
            /// <param name="y">要比较的第二个对象。</param>
            /// <returns>
            /// 一个有符号整数，指示 <paramref name="x" /> 和 <paramref name="y" /> 的相对值，如下表所示。
            ///         值
            ///         含义
            ///         小于零
            ///         <paramref name="x" /> 小于 <paramref name="y" />。
            ///         零
            ///         <paramref name="x" /> 等于 <paramref name="y" />。
            ///         大于零
            ///         <paramref name="x" /> 大于 <paramref name="y" />。
            ///       </returns>
            public int Compare(Card x, Card y)
            {
                return x.CompareTo(y);
            }

            /// <summary>比较两个对象并返回指示一个是否小于、 等于还是大于另一个值。</summary>
            /// <param name="x">要比较的第一个对象。</param>
            /// <param name="y">要比较的第二个对象。</param>
            /// <returns>
            /// 一个有符号整数，指示 <paramref name="x" /> 和 <paramref name="y" /> 的相对值，如下表所示。
            ///         值
            ///         含义
            ///         小于零
            ///         <paramref name="x" /> 小于 <paramref name="y" />。
            ///         零
            ///         <paramref name="x" /> 等于 <paramref name="y" />。
            ///         大于零
            ///         <paramref name="x" /> 大于 <paramref name="y" />。
            ///       </returns>
            /// <exception cref="T:System.ArgumentException">
            ///   既不 <paramref name="x" /> ，也不 <paramref name="y" /> 实现 <see cref="T:System.IComparable" /> 接口。
            ///   - 或 -
            ///   <paramref name="x" /> 和 <paramref name="y" /> 的类型不同，既没有一个可以处理与其他的比较。
            /// </exception>
            public int Compare(object x, object y)
            {
                return Compare((Card)x, (Card)(y));
            }

            /// <summary>
            /// 返回卡片默认比较器
            /// </summary>
            public static Comparer Default => new Comparer();
        }
    }
}
